package com.tdcoding.chat.helper;

import io.netty.handler.ssl.JdkSslClientContext;
import io.netty.handler.ssl.SslContext;

import java.io.File;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import javax.net.ssl.SSLException;

/**
 * 安全辅助类
 * @author Wellsa
 *
 */
public class SecurityHelper {

	public SslContext getSSLClient() {
		try {
			File certChainFile = new File(getClass().getResource(
					"/configure/test.crt").getFile());
			return new JdkSslClientContext(certChainFile);
		} catch (SSLException e) {
			e.printStackTrace();
		}
		return null;
	}

	 /**
     * Encrypt byte array.
     */
    public final static byte[] encrypt(byte[] source, String algorithm) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance(algorithm);
        md.reset();
        md.update(source);
        return md.digest();
    }
    
    /**
     * Encrypt string
     */
    public final static String encrypt(String source, String algorithm) throws NoSuchAlgorithmException {
        byte[] resByteArray = encrypt(source.getBytes(), algorithm);
        return toHexString(resByteArray);
    }
    
    
    /**
     * Get hex string from byte array
     */
    private final static String toHexString(byte[] res) {
        StringBuffer sb = new StringBuffer(res.length << 1);
        for(int i=0; i<res.length; i++) {
            String digit = Integer.toHexString(0xFF & res[i]);
            if (digit.length() == 1) {
                digit = '0' + digit;
            }
            sb.append(digit);
        }
        return sb.toString().toUpperCase();
    } 
    
    
    /**
     * Encrypt string using MD5 algorithm
     */
    public final static String encryptMD5(String source) {
        if (source == null) {
            source = "";
        }
    
        String result = "";
        try {
            result = encrypt(source, "MD5");
        }
        catch(NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }
        return result;
    }
    
    /**
     * Encrypt string using SHA algorithm
     */
    public final static String encryptSHA(String source) {
        if (source == null) {
            source = "";
        }
    
        String result = "";
        try {
            result = encrypt(source, "SHA");
        }
        catch(NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }
        return result;
    }
    
    public static void main(String[] args) throws NoSuchAlgorithmException {
		System.out.println(encryptSHA("123456"));
	}

}
